#!/usr/bin/env python3
"""
测试文件上传功能脚本
用于上传测试文件到系统并验证数据库记录
"""
import os
import sys
import requests
import time
from datetime import datetime

def test_upload(file_path=None):
    """
    测试文件上传功能
    
    Args:
        file_path: 可选，指定要上传的文件路径
    """
    # 上传API地址
    # 注意：根据配置文件，服务运行在8000端口
    api_url = "http://localhost:8000/api/upload/data"
    
    print("=" * 60)
    print("文件上传测试工具")
    print("=" * 60)
    print(f"上传目标API: {api_url}")
    
    # 如果没有指定文件，创建一个测试文件
    if not file_path:
        # 创建测试文件
        test_file_name = f"test_upload_{datetime.now().strftime('%Y%m%d_%H%M%S')}.csv"
        test_file_path = os.path.join(os.getcwd(), test_file_name)
        
        print(f"创建测试文件: {test_file_path}")
        with open(test_file_path, "w") as f:
            f.write("id,name,value\n")
            f.write("1,测试数据1,100\n")
            f.write("2,测试数据2,200\n")
            f.write("3,测试数据3,300\n")
        
        file_path = test_file_path
        cleanup = True
    else:
        # 验证文件存在
        if not os.path.exists(file_path):
            print(f"错误: 文件不存在: {file_path}")
            return False
        cleanup = False
    
    try:
        # 检查文件大小
        file_size = os.path.getsize(file_path)
        print(f"上传文件: {os.path.basename(file_path)} ({file_size} 字节)")
        
        # 开始上传
        print("开始上传...")
        start_time = time.time()
        
        # 发送请求
        with open(file_path, "rb") as f:
            files = {"file": (os.path.basename(file_path), f)}
            response = requests.post(api_url, files=files)
        
        # 计算耗时
        upload_time = time.time() - start_time
        
        # 检查响应
        if response.status_code == 200:
            print(f"✓ 上传成功! 耗时: {upload_time:.2f} 秒")
            print("\n上传响应:")
            try:
                data = response.json()
                # 美化输出
                print(f"状态: {data.get('status', 'unknown')}")
                print(f"消息: {data.get('message', '')}")
                if 'data' in data:
                    print("\n文件信息:")
                    for key, value in data['data'].items():
                        print(f"  {key}: {value}")
            except Exception:
                print(response.text)
            
            # 提示运行查询脚本查看数据库记录
            print("\n📋 提示: 运行以下命令查看数据库中的上传记录:")
            print("  python query_uploads.py")
            
            return True
        else:
            print(f"✗ 上传失败! 状态码: {response.status_code}")
            print("错误响应:")
            try:
                error_data = response.json()
                print(error_data)
            except Exception:
                print(response.text)
            
            return False
            
    except requests.exceptions.ConnectionError:
        print("✗ 连接错误! 请检查服务是否正在运行")
        print("提示: 服务应该运行在 http://localhost:8000")
        print("如果服务运行在其他端口，请修改脚本中的api_url")
        return False
    except Exception as e:
        print(f"✗ 上传过程中发生错误: {e}")
        return False
    finally:
        # 清理测试文件
        if cleanup and os.path.exists(file_path):
            try:
                os.remove(file_path)
                print(f"\n已清理测试文件: {file_path}")
            except:
                pass

def main():
    """主函数"""
    # 检查是否安装了requests
    try:
        import requests
    except ImportError:
        print("请先安装requests库: pip install requests")
        return
    
    # 处理命令行参数
    if len(sys.argv) > 1:
        # 如果提供了文件路径，上传指定文件
        test_upload(sys.argv[1])
    else:
        # 否则创建并上传测试文件
        test_upload()

if __name__ == "__main__":
    main()